package com.topdt.jbpm.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.thx.common.web.Page;
import com.topdt.jbpm.dao.TodoDao;
import com.topdt.jbpm.dao.WorkDao;
import com.topdt.jbpm.model.Work;


/**  
 *  @Project       : saasoa
 *  @Program Name  : com.topdt.jbpm.service.WorkService.java
 *  @Class Name    : WorkService
 *  @Description   : 类描述
 *  @Author        : calonlan
 *  @Creation Date : 2015年3月10日 下午3:13:14 
 *  @ModificationHistory  
 *  Who        When          What 
 *  --------   ----------    -----------------------------------
 *  username   2015年3月10日       TODO
 */
@Service
@Transactional(readOnly = true)
public class WorkService {
	@Autowired
	private WorkDao workDao;
	@Autowired
	private TodoDao todoDao;	
	public Work getByWorkId(String workId) {
		return workDao.get(workId);
	}
	
	public List<Work> findByJbpmFlowKey(String jbpmFlowKey) {
		return workDao.findByJbpmFlowKey(jbpmFlowKey);
	}
	
	public List<Work> findByJbpmFlowIdAndKey(String jbpmFlowId, String jbpmFlowKey) {
		return workDao.findByJbpmFlowIdAndKey(jbpmFlowId, jbpmFlowKey);
	}
	
	
	/**
	 * 根据work_id删除wf_work表中记录
	 * @author 刘杰
	 * @date   May 15, 2014 1:59:33 PM 
	 * @param delId
	 */
	@Transactional(readOnly = false)
	public void delWorks(String[] delIds) {
		String delIdsStr = "";
		for (int i = 0; i < delIds.length; i++) {
			if (i == 0) {
				delIdsStr += "'"+delIds[i]+"'";
			} else {
				delIdsStr += "," + "'"+delIds[i]+"'";
			}
		}
		workDao.deleteWorks(delIdsStr);
	}
	
	
	public List<Work> getAll(Work work, String appAttr) {
		return workDao.getAll(work, appAttr);
	}
	/**
	 * 工作查询
	 * @author zhangyong
	 * @date   2016年3月8日 下午2:36:57 
	 * @param work
	 * @param page
	 * @return
	 */
	public Page<Work> getAll(Work work, Page<Work> page) {
		page.setResult(workDao.getAll(work, page.getStart(), page.getMax()));
		page.setCount(workDao.queryCount(work));
		return page;
	}
	public Page<Work> worklist(Work work, Long personnelId, Page<Work> page) {
		page.setResult(workDao.getWorklist(work, personnelId, page.getStart(), page.getMax()));
		page.setCount(workDao.queryWorklistCount(work, personnelId));
		return page;
	}

	public List<Work> getWorkPage(String toUserId,String workTitle,String type) {
		return workDao.getWorkPage(toUserId, workTitle,type);
	}
	
	/**
	 * 重载getWorkPage方法，根据appId查找已办工作
	 * @author 冯晋首
	 * @date   2015年12月21日 下午5:03:52 
	 * @param toUserId
	 * @param workTitle
	 * @param type
	 * @param appId
	 * @return
	 */
	public List<Work> getWorkPage(String toUserId,String workTitle,String type,String appId) {
		return workDao.getWorkPage(toUserId, workTitle, type, appId);
	}

	public Work getWorkById(String workId) {
		return workDao.getWorkById(workId);
	}
	
	/**
	 * 客户端查询已办信息，公文工单通用
	 * @author zhangyong
	 * @date   2015年12月23日 下午2:28:53 
	 * @param userId
	 * @param workTitle
	 * @param type
	 * @param appId
	 * @param start
	 * @param max
	 * @return
	 */
	public List<Work> getHistWorkByAppId(String userId, String workTitle,String type,String appId, int start, int max) {		
		List<Work> worksList = workDao.getWorkPage(  userId,  workTitle,  type,  appId,  start,   max);
		return worksList;
	}
	
	/**
	 * 客户端，查找正在办理的公文或工单
	 * @author 冯晋首
	 * @date   2016年2月17日 下午4:47:02 
	 * @param toUserId
	 * @param workTitle
	 * @param type
	 * @param appId
	 * @param start
	 * @param max
	 * @return
	 */
	public List<Work> getDoingWork(String toUserId,String workTitle,String type,String appId,int start, int max) {
		return workDao.getDoingWork(toUserId, workTitle, type, appId, start, max);
	}
	
	/**
	 * 客户端查询公文工单的草稿，我的起草工作
	 * @author zhangyong
	 * @date   2015年12月23日 下午2:54:23 
	 * @param work
	 * @param appAttr
	 * @param start
	 * @param limit
	 * @return
	 */
	public List<Work> getAll(Work work, String appAttr,final int start, final int limit) {
		return workDao.getAll(work, appAttr,  start,   limit);
	}
	
	/**
	 * 客户端根据应用ID与用户ID取得草稿信息
	 * 
	 * @param appId
	 * @param userId
	 * @return
	 */
	public List<Work> getWorkByAppId(String userId, String appId, int start, int max) {
		
		List<Work> workList = workDao.getWorkByAppId(userId, appId, start, max);
		return workList;
	}

	/**
	 * 分页查询正在办理的工作或已结束工作
	 * @author 刘杰
	 * @date   2016年1月8日 上午11:00:03 
	 * @param userId
	 * @param workTitle
	 * @param workType
	 * @param state
	 * @return
	 */
	public List<Work> getHaveTodoRunWorkPage(String userId, String workTitle,
			String workType, String state) {
		List<Work> workList = workDao.getHaveTodoRunWorkPage(userId, workTitle, workType, state);
		return workList;
	}

	/**
	 * 根据appId分页查询正在办理的工作或已结束工作
	 * @author 刘杰
	 * @date   2016年1月8日 上午11:00:54 
	 * @param userId
	 * @param workTitle
	 * @param workType
	 * @param appId
	 * @param state
	 * @return
	 */
	public List<Work> getHaveTodoRunWorkPage(String userId, String workTitle,
			String workType, String appId, String state) {
		List<Work> workList = workDao.getHaveTodoRunWorkPage(userId, workTitle, workType, appId, state);
		return workList;
	}

	/**
	 * 首页查询正在办理的工作
	 * @author 刘杰
	 * @date   2016年1月8日 下午2:08:50 
	 * @param userId
	 * @param num
	 * @param state
	 * @return
	 */
	public List<Work> getHaveTodoRunWorkByPid(String userId, int num, String state) {
		List<Work> workList = workDao.getHaveTodoRunWorkByPid(userId, num, state);
		return workList;
	}

	/**
	 * 
	 * @author zhangyong
	 * @date   2016年3月8日 下午4:55:26 
	 * @param delIds
	 * @param flag
	 */
	@Transactional(readOnly = false)
	public void updateWorksDeteleStatus(String[] delIds,boolean flag){
		String delIdsStr = "";
		for (int i = 0; i < delIds.length; i++) {
			if (i == 0) {
				delIdsStr += "'"+delIds[i]+"'";
			} else {
				delIdsStr += "," + "'"+delIds[i]+"'";
			}
		}
		workDao.updateWorksDeteleStatus(delIdsStr,flag);
	}

	/**
	 * 
	 * 作者：wangxufeng
	 * 日期：2015-2-26
	 * 作用：强制结束流转的异常工作
	 *
	 */
	@Transactional(readOnly = false)
	public void endWorks(String[] Ids){
		String endIdsStr = "";
		for (int i = 0; i < Ids.length; i++) {
			if (i == 0) {
				endIdsStr += "'"+Ids[i]+"'";
			} else {
				endIdsStr += "," + "'"+Ids[i]+"'";
			}
		}
		//结束工作
		workDao.endWorks(endIdsStr);
		//删除待办
		todoDao.deleteworks(endIdsStr);
	}
}
